// 基于axios封装的请求模块
import axios from 'axios'
import JSONbig from 'json-bigint'
import router from '@/router'
// 创建一个axios实例，就是复制了一个axios
// 通过这个实例去发送请求，把需要的配置配置给这个实例
// 通常写法
// axios.defaults.baseURL=''
// 但当有多个不同的路径请求接口
// 就需要复制一个axios
// const req1 = axios.create()
// req1.defaults.baseURL = ''
// req1({
//     method: '',
//     url: ''
// })
// req1.post('')
// req1.get('')
const request = axios.create({
    // baseURL: 'http://ttapi.research.itcast.cn/' // 请求的基础路径
    baseURL: 'http://api-toutiao-web.itheima.net/',
    // 定义后端返回的原始数据的处理
    transformResponse: [function (data) {
        try{
            return JSONbig.parse(data);
        }catch(err){
            return data
        }
        
    }]
})

// 请求拦截器
request.interceptors.request.use(
    // 所有请求会经过这里
    // config是当前请求相关的配置信息对象
    // config是可以修改的
    function (config) {
        // console.log('发起了请求')

        // 在允许请求出去之前，统一设置业务处理功能
        // 统一设置token
        const user = JSON.parse(window.localStorage.getItem('user'))
        // 如果有登录用户信息，统一设置token
        if (user) {
            config.headers.Authorization = `Bearer ${user.token}`
        }
        // return config 之后，请求才会真正的发出去
        return config
},
    // 请求失败
    function (error) {
        return Promise.reject(error)
})


// 响应拦截器
request.interceptors.response.use(
    function(response){
        // 所有响应码为2xx的响应都会进入这里
        // response是响应处理
        // 一定要把响应结果return出去，否则发送请求的位置拿不到数据
        return response
    },function(error){
        // 任何超出2xx的响应都会进入这里
        // 使用console.dir(error)来查看错误信息
        const { status } = error.response
        if(error.response&&status === 401){
            window.localStorage.removeItem('user')
            router.push('/login')
        } else if(status === 403){

        }else if(status >= 500){

        }
        return Promise.reject(error)
    }
)

// 导出请求方法
export  default request
